package chapter05.composite;
import java.util.ArrayList;
public class CompositePattern {
	public static void main(String[] args){
		Component c0=new Composite();  
		Component c1=new Composite();  
        Component leaf1=new Leaf("1");  
        Component leaf2=new Leaf("2");  
        Component leaf3=new Leaf("3");           
        c0.add(leaf1);  
        c0.add(c1);
        c1.add(leaf2);  
        c1.add(leaf3);           
        c0.operation();  
	}
}
//抽象构件
interface Component
{
	public void add(Component c);
	public void remove(Component c);
	public Component getChild(int i);
	public void operation(); 
}
//树叶构件
class Leaf implements Component
{
	private String name;
	public Leaf(String name) {
		this.name = name;
	}
	public void add(Component c){ }			
	public void remove(Component c){ }	
	public Component getChild(int i)
	{
		return null;
	}	
	public void operation()
	{
		System.out.println("树叶"+name+"： 被访问！");  
	} 
}
//树枝构件
class Composite implements Component
{
	private ArrayList<Component> children = new ArrayList<Component>();	
	public void add(Component c)
	{
		children.add(c);
	}	
	public void remove(Component c)
	{
		children.remove(c);
	}	
	public Component getChild(int i)
	{
		return children.get(i);
	}	
	public void operation()
	{
		for(Object obj:children)
		{
			((Component)obj).operation();
		}
	} 	
}